﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Kakaroto.Models;
using System.Collections.Specialized;
using System.Collections;
using System.Web.ModelBinding;

namespace Kakaroto.Pedidos
{
    public partial class ListaPedidos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            using (PedidoActions actPedido = new PedidoActions())
            {
                decimal totalPedido = 0;
                totalPedido = actPedido.GetTotal();
                if (totalPedido > 0)
                {
                    ItensPedido.Visible = false;
                    lblTotal.Text = String.Format("{0:c}", totalPedido);
                }
                else
                {
                    LabelTotalText.Text = "";
                    lblTotal.Text = "";
                    ItensPedido.InnerText = "Nenhum produto anexado ao pedido...";
                    ValTotal.Visible = false;
                    FinalizaBtn.Visible = false;
                    UpdateBtn.Visible = false;
                    EsvaziaBtn.Visible = false;
                }

                if (actPedido.isCancellable() == false)
                {
                    CancelaBtn.Visible = false;

                }

                actPedido.RemoveItensEmEdicaoDoBanco();
            }
        }

        public List<ItemPedido> GetAllItens()
        {
            return HttpContext.Current.Session["ItensPedido"] as List<ItemPedido>;
        }

        public List<ItemPedido> GetItensPedido()
        {
            return GetAllItens().Where(ip => ip.Pronto == null).OrderBy(ip => ip.Hora).ToList();
        }

        public List<ItemPedido> GetItensProntos()
        {
            return GetAllItens().Where(ip => ip.Pronto == true).OrderBy(ip => ip.Hora).ToList();
        }

        public List<ItemPedido> GetItensEmPreparo()
        {
            return GetAllItens().Where(ip => ip.Pronto == false).OrderBy(ip => ip.Hora).ToList();
        }

        public List<ItemPedido> AtualizaItens()
        {
            PedidoActions actPedido = new PedidoActions();
            String IdPedido = actPedido.GetIdPedido();

            PedidoActions.PedidoUpdates[] pedidoUpdates = new PedidoActions.PedidoUpdates[ListaItensPedido.Rows.Count];
            for (int i = 0; i < ListaItensPedido.Rows.Count; i++)
            {
                IOrderedDictionary valoresItem = new OrderedDictionary();
                valoresItem = ObterValores(ListaItensPedido.Rows[i]);
                pedidoUpdates[i].IdProduto = Convert.ToInt32(valoresItem["Id_Prod"]);

                CheckBox cbRemover = new CheckBox();
                cbRemover = (CheckBox)ListaItensPedido.Rows[i].FindControl("Remove");
                pedidoUpdates[i].Remover = cbRemover.Checked;

                TextBox quantidadeText = new TextBox();
                quantidadeText = (TextBox)ListaItensPedido.Rows[i].FindControl("QtddDeProduto");
                pedidoUpdates[i].Quantidade = Convert.ToInt16(quantidadeText.Text.ToString());
            }

            actPedido.AtualizarPedido(IdPedido, pedidoUpdates);
            ListaItensPedido.DataBind();
            lblTotal.Text = String.Format("{0:c}", actPedido.GetTotal());
            return GetItensPedido();          
        }

        public static IOrderedDictionary ObterValores(GridViewRow linha)
        {
            IOrderedDictionary valores = new OrderedDictionary();
            foreach (DataControlFieldCell cell in linha.Cells)
            {
                if (cell.Visible)
                {
                    cell.ContainingField.ExtractValuesFromCell(valores, cell, linha.RowState, true);
                }
            }
            return valores;
        }

        protected void AdicionaBtn_Click(object sender, EventArgs e)
        {
            Response.Redirect("./ListaCategorias.aspx");
        }

        protected void EsvaziaBtn_Click(object sender, EventArgs e)
        {
            PedidoActions actPedido = new PedidoActions();
            actPedido.EsvaziaCarrinho();
            Response.Redirect("./ListaItensPedido.aspx");
        }

        protected void CancelaBtn_Click(object sender, EventArgs e)
        {
            PedidoActions actPedido = new PedidoActions();
            actPedido.CancelarPedido();
            Response.Redirect("./Default.aspx");
        }

        protected void UpdateBtn_Click(object sender, EventArgs e)
        {
            AtualizaItens();
            Response.Redirect("./ListaItensPedido.aspx");
        }

        protected void FinalizaBtn_Click(object sender, EventArgs e)
        {
            Response.Redirect("./FinalizaPedido.aspx");
        }
    }
}